#ifndef INFINITY_GRAPHICS_MODEL_H
#	define INFINITY_GRAPHICS_MODEL_H

#include "servicegraphics.h"

namespace infinity {
	namespace graphics {

class Mesh;

class Model
{
private : //! @name Construction & Destruction
	//! @{
	Model(ServiceGraphics::Groups group)
	:	m_group(group)
	,	m_transform(dw::maths::mat4::identity)
	,	m_mesh(NULL)
	{
	}

	~Model()
	{
		;
	}
	//! @}

public : //! @name Setup
	//! @{
	void setTransform(const dw::maths::mat4& transform) { m_transform = transform; }

	const dw::maths::mat4& getTransform() const { return m_transform; }
	dw::maths::mat4& getTransform() { return m_transform; }
	
	const Mesh* getMesh() const { return m_mesh; }
	Mesh* getMesh() { return m_mesh; }

	ServiceGraphics::Groups getGroup() const { return m_group; }
	//! @}

private : //! @name Internal setup
	//! @{
	void setMesh(Mesh* mesh) { m_mesh = mesh; }
	friend class ServiceGraphics;
	//! @}

private : //! @name Data
	//! @{
	ServiceGraphics::Groups m_group;
	dw::maths::mat4 m_transform;
	Mesh* m_mesh;
	//! @}
};

	} // namespace graphics
} // namespace infinity

#endif // !INFINITY_GRAPHICS_SIMPLE_MESH_H
